package com.liuyz;

import java.util.ArrayList;
import java.util.List;

public class 通配符 {
    public static void main(String[] args) {

        List<Object> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<AA> list3 = new ArrayList<>();
        List<BB> list4 = new ArrayList<>();
        List<CC> list5 = new ArrayList<>();

        /*

        能不能这么写?

        m1(list1); //
        m1(list2); //
        m1(list3); //
        m1(list4); //
        m1(list5); //

        m2(list1); //
        m2(list2); //
        m2(list3); //
        m2(list4); //
        m2(list5); //

        m3(list1); //
        m3(list2); //
        m3(list3); //
        m3(list4); //
        m3(list5); //
         */

    }

    // 任何泛型都可以
    static void m1(List<?> list) {

    }

    // 必须是AA类或AA类的子类
    static void m2(List<? extends AA> list) {

    }

    // 必须是AA类或AA类的父类
    static void m3(List<? super AA> list) {

    }
}

class AA {

}

class BB extends AA {

}

class CC extends BB {

}